package com.duobaoyu.dby.supply.biz.client.boundary.order.bean.bo;

import cn.hutool.core.lang.Pair;
import cn.hutool.core.util.StrUtil;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.apache.commons.lang3.builder.Diff;

import java.io.Serializable;
import java.math.BigDecimal;
import java.util.List;

/**
 * 更新订单BO
 * @author chenms
 * @date 2023/11/3 4:49 PM
 */
@Data
@AllArgsConstructor
@NoArgsConstructor
@Builder
public class UpdateOrderBO implements Serializable {

    /**
     * 供应链订单号
     */
    private String orderSn;


    /**
     * 供应链三方交易单号
     */
    private String orderTradeSn;

    /**
     * 订单标签
     */
    private String orderTag;

    /**
     * 订单状态
     * 第一个旧状态
     * 第二个新状态
     */
    private Pair<Integer, Integer> orderStatus;

    /**
     * 取消原因
     */
    private String cancelReason;

    /**
     * 错误信息
     */
    private String errorInfo;

    /**
     * 渠道交易号
     */
    private String channelTradeOrderSn;

    /**
     * 渠道订单号
     */
    private String channelOrderSn;

    /**
     * 是否允许售后
     */
    private Boolean afterSalesAllowed;

    /**
     * 预估运费
     */
    private BigDecimal estimateFreight;

    /**
     * 渠道实际运费
     */
    private BigDecimal channelActualFreightAmount;

    /**
     * 操作备注
     */
    private String operatorRemark;

    /**
     * 日志操作来源
     */
    private String source;

    /**
     * 日志操作描述
     */
    private String description;


    /**
     * 需要记录的日志变动项
     */
    private transient List<? extends Diff> logChangeItemList;


    /**
     * true保存日志
     */
    public boolean needSaveLog() {
        return StrUtil.isNotBlank(source) && StrUtil.isNotBlank(description);
    }

}
